package cn.itcast.nems.order.dao.mapper;

import cn.itcast.nems.order.dao.dataobject.EnrolPaidOrderDO;
import cn.itcast.nems.order.dao.dataobject.OrderDO;
import cn.itcast.nems.order.dao.dataobject.OrderLinkDO;
import cn.itcast.nems.order.dao.dataobject.StudentClazzIdDO;
import cn.itcast.nems.order.dao.entity.Order;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 销售订单-头 Mapper 接口
 * </p>
 *
 * @author liyong
 * @since 2023-08-31
 */
@Mapper
public interface OrderMapper extends BaseMapper<Order> {

    /**
     * 查询已完成首次支付的缴费记录
     *
     * @param orderDO 参数
     * @return 缴费订单
     */
    List<EnrolPaidOrderDO> findEnrolPaidOrderList(@Param("param") EnrolPaidOrderDO param);

    /*
     * 分页查询
     * @param page 分页参数
     * @param orderDO 搜索条件
     * @return 分页数据
     */
    IPage<OrderDO> findPageList(Page<OrderDO> page, @Param("param") OrderDO param);

    Map<String, Object> orderInfo(String orderId);

    List<Map<String, Object>> listOrderNoByCustomerName(String customerId);

    /**
     * 查询待支付的订单 ,用于 nems报名页面回显
     *
     * @param cid 客户ID
     * @return 订单详情
     */
    OrderLinkDO findPendingList(@Param("cid") String cid);

    /**
     * 功能描述：通过订单编号获取订单头信息
     *
     * @param no 订单编号
     * @return 订单头数据
     * @author 刘曙
     * @update:[变更日期YYYY-MM-DD][更改人姓名][变更描述]
     * @since 2023年9月18日
     */
    Order selectByNo(@Param("no") String no);

    /**
     * 功能描述：通过业务订单编号获取订单头信息
     *
     * @param bizOrderNo 业务订单号
     * @return 订单头数据
     * @author 刘曙
     * @update:[变更日期YYYY-MM-DD][更改人姓名][变更描述]
     * @since 2023年9月18日
     */
    Order selectByBizOrderNo(@Param("bizOrderNo") String bizOrderNo);

    /**
     * 查询关联订单
     *
     * @param id 订单ID
     * @return 订单列表
     */
    List<Order> findListByOrderIdOrAssociatedOrderId(@Param("id") String id);

    Integer getStudentIdByOrderId(@Param("orderId") String orderId);

    /**
     * <p>
     * 根据学籍ID查询订单
     * </p>
     *
     * @param studentRecordId 学籍ID
     * @author zhouwei
     * @since 2024/3/28 4:59 PM
     **/
    Order findByStudentRecordId(@Param("studentRecordId") String studentRecordId ) ;

    /**
     * 根据订单ID查询学员和班级ID
     * @param orderId 订单ID
     * @return 学员和班级ID
     */
    StudentClazzIdDO findStudentClazzId(@Param("orderId") String orderId);
}
